package edu.neu.agv_backend.service;

import edu.neu.agv_backend.dto.AgvConfigDto;
import edu.neu.agv_backend.dto.AjaxResult;
import edu.neu.agv_backend.entity.AgvConfig;
import edu.neu.agv_backend.mapper.AgvConfigMapper;
import org.springframework.beans.BeanUtils;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Service;

@Service
public class ConfigFromDBService {
    private AgvConfigMapper agvConfigMapper;

    public ConfigFromDBService(AgvConfigMapper agvConfigMapper) {
        this.agvConfigMapper = agvConfigMapper;
    }


    //这里要从数据库查询出第一个之后，返回一个AjaxResult<AgvConfigDto>对象，然后设置数据表里面只有一行，所以只需要选择id为1的即可
    //但是数据库中返回的是AgvConfig与AgvConfigDto虽然私有属性一样，但属于两个类，或许可以通过某种关系变得优美的使用
    public AjaxResult<AgvConfigDto> getConfig() {
        AgvConfig agvConfig = agvConfigMapper.selectById(1);

        AjaxResult<AgvConfigDto> ajaxResult = new AjaxResult<>();
        if (agvConfig != null) {
            AgvConfigDto dto = new AgvConfigDto();
            BeanUtils.copyProperties(agvConfig, dto);
            ajaxResult.setCode(200);
            ajaxResult.setMsg("success");
            ajaxResult.setData(dto);
        } else {
            ajaxResult.setCode(404);
            ajaxResult.setMsg("Config not found");
        }
        return ajaxResult;
    }

    public AjaxResult<AgvConfigDto> updateConfig(AgvConfigDto dto) {
        // 确保更新的是唯一一行（ID = 1），如果前端未携带则强制设置
        if (dto.getId() == null) {
            dto.setId(1L);
        }
        AgvConfig entity = new AgvConfig();
        BeanUtils.copyProperties(dto, entity);
        int rows = agvConfigMapper.updateById(entity);

        AjaxResult<AgvConfigDto> ajaxResult = new AjaxResult<>();
        if (rows > 0) {
            ajaxResult.setCode(200);
            ajaxResult.setMsg("success");
            ajaxResult.setData(dto);
        } else {
            ajaxResult.setCode(500);
            ajaxResult.setMsg("Update failed");
        }
        return ajaxResult;
    }
}
